<?php

/**
 * productoNew actions.
 *
 * @package    cronos-doctrine
 * @subpackage productoNew
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class productoNewActions extends sfActions
{
 /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */
   public function executeIndexProducto(sfWebRequest $request)
  {
    $this->filtro = new ProductoFormFilter($this->getUser()->getAttribute('producto_filters'));
    $this->filtro->setWidget('tipo_id', new sfWidgetFormInputHidden(array(),array('value' => 1)));
      if ($request->isMethod('post'))
      {
        $this->filtro->bind($request->getParameter('producto_filters'));
        if ($this->filtro->isValid())
        {
          $this->getUser()->setAttribute('producto_filters', $this->filtro->getValues());
        }
      }

      if(!$this->getUser()->getAttribute('producto_filters')){
          $producto = new Producto();
          $this->consulta =  $producto->getTipoProductos(1);
           
      }else {
          
          $this->consulta = $this->filtro->buildQuery($this->getUser()->getAttribute('producto_filters'));
          $filtros = $this->getUser()->getAttribute('producto_filters');
          if($filtros['negocio_list']){
            $negocio_list = $filtros['negocio_list'];
            $this->consulta->leftJoin('r.CategoriaHasProducto ca');
            $this->consulta->leftJoin('ca.Categoria cat');
            $this->consulta->andWhere('cat.padre=   ?', $negocio_list);
          }
          
          $this->consulta->andWhere('empresa_id = ?', 1);
          $this->consulta->orderBy('orden ASC');
      }

        $this->pager = new sfDoctrinePager('Producto', sfConfig::get('app_max_por_page'));
        $this->pager->setQuery($this->consulta);
        $this->pager->setPage($request->getParameter('page', 1));
        $this->pager->init();
  }
  
   public function executeIndexServicio(sfWebRequest $request)
  {
    $this->filtro = new ServiciopFormFilter($this->getUser()->getAttribute('servicio_filters'));
    $this->filtro->setWidget('tipo_id', new sfWidgetFormInputHidden(array(),array('value' => 2)));
      if ($request->isMethod('post'))
      {
        $this->filtro->bind($request->getParameter('servicio_filters'));
        if ($this->filtro->isValid())
        {
          $this->getUser()->setAttribute('servicio_filters', $this->filtro->getValues());
        }
      }

      if(!$this->getUser()->getAttribute('servicio_filters')){
          $producto = new Producto();
          $this->consulta =  $producto->getTipoServicios(1);
                     
      }else {
          $this->consulta = $this->filtro->buildQuery($this->getUser()->getAttribute('servicio_filters'));
          $filtros = $this->getUser()->getAttribute('servicio_filters');
          if($filtros['negocio_list']){
            $negocio_list = $filtros['negocio_list'];
            $this->consulta->leftJoin('r.CategoriaHasProducto ca');
            $this->consulta->leftJoin('ca.Categoria cat');
            $this->consulta->andWhere('cat.padre=   ?', $negocio_list);
            }
          
          $this->consulta->andWhere('empresa_id = ?', 1);
          $this->consulta->orderBy('orden ASC');
      }

        $this->pager = new sfDoctrinePager('Producto', sfConfig::get('app_max_por_page'));
        $this->pager->setQuery($this->consulta);
        $this->pager->setPage($request->getParameter('page', 1));
        $this->pager->init();
  }
  
  public function executeResetProducto(sfWebRequest $request)
  {
    $this->getUser()->getAttributeHolder()->remove('producto_filters');
     
    
    $this->redirect('productoNew/indexProducto');
  }
  
  public function executeResetServicio(sfWebRequest $request)
  {
    $this->getUser()->getAttributeHolder()->remove('servicio_filters');
    
    
    $this->redirect('productoNew/indexServicio');
  }
    
    
    
  public function executeIndex(sfWebRequest $request)
  {
    $producto = new Producto();
    $producto->setEmpresaId(1);
    $producto->setTipoId(1);
    
    $this->form = new ProductoForm($producto);
    $this->form->setWidget('empresa_id', new sfWidgetFormInputHidden(array(),array('value' => 1)));
    $this->form->setWidget('tipo_id', new sfWidgetFormInputHidden(array(),array('value' => 1)));
    
    $this->tipo = 1;
  }


  public function executeCreate(sfWebRequest $request)
  {
    $this->forward404Unless($request->isMethod(sfRequest::POST));
    $this->tipo = $request->getParameter('tipo_id');
    $producto = new Producto();
    $producto->setEmpresaId(1);
    $producto->setTipoId($this->tipo);
    
    $this->form = new ProductoForm($producto);
    $this->form->setWidget('empresa_id', new sfWidgetFormInputHidden(array(),array('value' => 1)));
    $this->form->setWidget('tipo_id', new sfWidgetFormInputHidden(array(),array('value' => $this->tipo)));
    
    
    
    $this->processForm($request, $this->form);

    $this->setTemplate('index');
  }
  
  public function executeNew(sfWebRequest $request)
  {
    $producto = new Producto();
    $producto->setEmpresaId(1);
    $producto->setTipoId(2);
    
    $this->form = new ProductoForm($producto);
    $this->form->setWidget('empresa_id', new sfWidgetFormInputHidden(array(),array('value' => 1)));
    $this->form->setWidget('tipo_id', new sfWidgetFormInputHidden(array(),array('value' => 2)));
    
    $this->tipo = 2;
  }



  public function executeEdit(sfWebRequest $request)
  {
    $this->tipo = '';
    $this->forward404Unless($producto = Doctrine_Core::getTable('Producto')->find(array($request->getParameter('id'))), sprintf('Object producto does not exist (%s).', $request->getParameter('id')));
    $this->form = new ProductoForm($producto);
     $this->form->setWidget('empresa_id', new sfWidgetFormInputHidden(array(),array('value' => $producto->getEmpresaId())));
    $this->form->setWidget('tipo_id', new sfWidgetFormInputHidden(array(),array('value' => $producto->getTipoId())));
    
    
    //Para obtener los valores de la Categoria y Negocio para ser seteado por Jquery en la lista desplegable
    if($producto->getCategoria()->getFirst()){
    $this->categoria =  $producto->getCategoria()->getFirst();
    $this->categoriaId = $this->categoria->getId();
    $this->categoriaNombre = $this->categoria->getNombre();
    
    $categoria = new Categoria();
        if($categoria->getCategoriaPorId($this->categoria->getPadre())){
            $this->negocio = $categoria->getCategoriaPorId($this->categoria->getPadre());
            $this->negocioId = $this->negocio->getId();
            $this->negocioNombre = $this->negocio->getNombre();
        }
    //Fin de la obtencion de valores de la Categoria y Negocio para ser setado por Jquery en la lista desplegable
    }
   
  }

  public function executeUpdate(sfWebRequest $request)
  {
    $this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT));
    $this->forward404Unless($producto = Doctrine_Core::getTable('Producto')->find(array($request->getParameter('id'))), sprintf('Object producto does not exist (%s).', $request->getParameter('id')));
    $this->form = new ProductoForm($producto);

    $this->processForm($request, $this->form);
    $this->form->setWidget('empresa_id', new sfWidgetFormInputHidden(array(),array('value' => 1)));
    $this->form->setWidget('tipo_id', new sfWidgetFormInputHidden(array(),array('value' => 1)));
    
    //Para obtener los valores de la Categoria y Negocio para ser seteado por Jquery en la lista desplegable
    $this->categoria =  $producto->getCategoria()->getFirst();
    $this->categoriaId = $this->categoria->getId();
    $this->categoriaNombre = $this->categoria->getNombre();
    
    $categoria = new Categoria();
    $this->negocio = $categoria->getCategoriaPorId($this->categoria->getPadre());
    $this->negocioId = $this->negocio->getId();
    $this->negocioNombre = $this->negocio->getNombre();
    //Fin de la obtencion de valores de la Categoria y Negocio para ser setado por Jquery en la lista desplegable
    $this->setTemplate('edit');
  }
  
  public function executeEditServicio(sfWebRequest $request)
  {
    $this->forward404Unless($producto = Doctrine_Core::getTable('Producto')->find(array($request->getParameter('id'))), sprintf('Object producto does not exist (%s).', $request->getParameter('id')));
    $this->form = new ServicioForm($producto);
    $this->form->setWidget('empresa_id', new sfWidgetFormInputHidden(array(),array('value' => 1)));
    $this->form->setWidget('tipo_id', new sfWidgetFormInputHidden(array(),array('value' => 2)));
    
    //Para obtener los valores de la Categoria y Negocio para ser seteado por Jquery en la lista desplegable
    $this->categoria =  $producto->getCategoria()->getFirst();
    $this->categoriaId = $this->categoria->getId();
    $this->categoriaNombre = $this->categoria->getNombre();
    
    $categoria = new Categoria();
    $this->negocio = $categoria->getCategoriaPorId($this->categoria->getPadre());
    $this->negocioId = $this->negocio->getId();
    $this->negocioNombre = $this->negocio->getNombre();
    //Fin de la obtencion de valores de la Categoria y Negocio para ser setado por Jquery en la lista desplegable
    
    
  }

  public function executeUpdateServicio(sfWebRequest $request)
  {
    $this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT));
    $this->forward404Unless($producto = Doctrine_Core::getTable('Producto')->find(array($request->getParameter('id'))), sprintf('Object producto does not exist (%s).', $request->getParameter('id')));
    $this->form = new ServicioForm($producto);
    $this->form->setWidget('empresa_id', new sfWidgetFormInputHidden(array(),array('value' => 1)));
    $this->form->setWidget('tipo_id', new sfWidgetFormInputHidden(array(),array('value' => 2)));
    $this->processForm($request, $this->form, 2);

    //Para obtener los valores de la Categoria y Negocio para ser seteado por Jquery en la lista desplegable
    $this->categoria =  $producto->getCategoria()->getFirst();
    $this->categoriaId = $this->categoria->getId();
    $this->categoriaNombre = $this->categoria->getNombre();
    
    $categoria = new Categoria();
    $this->negocio = $categoria->getCategoriaPorId($this->categoria->getPadre());
    $this->negocioId = $this->negocio->getId();
    $this->negocioNombre = $this->negocio->getNombre();
    //Fin de la obtencion de valores de la Categoria y Negocio para ser setado por Jquery en la lista desplegable
    $this->setTemplate('editServicio');
  }

  public function executeDelete(sfWebRequest $request)
  {
    $request->checkCSRFProtection();

    $this->forward404Unless($producto = Doctrine_Core::getTable('Producto')->find(array($request->getParameter('id'))), sprintf('Object producto does not exist (%s).', $request->getParameter('id')));
    
    try {
           $producto->delete();
           $this->getUser()->setFlash('notice', 'El Item fué removido exitosamente.');
           $this->redirect('producto/index');
           
      } catch (Doctrine_Exception $e) {
          $this->getUser()->setFlash('error', 'No se puedo eliminar el item, existen referencias a esta entrada.'); 
          $this->redirect('productoNew/index');
      }
  }
  
  public function executeDeleteServicio(sfWebRequest $request)
  {
    $request->checkCSRFProtection();

    $this->forward404Unless($producto = Doctrine_Core::getTable('Producto')->find(array($request->getParameter('id'))), sprintf('Object producto does not exist (%s).', $request->getParameter('id')));
    
    try {
           $producto->delete();
           $this->getUser()->setFlash('notice', 'El Item fué removido exitosamente.');
           $this->redirect('producto/indexServicio');   
           
      } catch (Doctrine_Exception $e) {
          $this->getUser()->setFlash('error', 'No se puedo eliminar el item, existen referencias a esta entrada.'); 
          $this->redirect('productoNew/indexServicio');   
      }
  }
  

  
  public function executeDeleteImagen(sfWebRequest $request)
  {
    

    $this->forward404Unless($archivo = Doctrine_Core::getTable('Archivo')->find(array($request->getParameter('id'))), sprintf('Object galeria does not exist (%s).', $request->getParameter('id')));
    
    try {
           $archivo->delete();
           $this->getUser()->setFlash('notice', 'El Item fué removido exitosamente.'); 
          
      } catch (Doctrine_Exception $e) {
          $this->getUser()->setFlash('error', 'No se puedo eliminar el item, existen referencias a esta entrada.'); 
          return sfView::SUCCESS;
      }
      return sfView::SUCCESS;
  }

  protected function processForm(sfWebRequest $request, sfForm $form, $tipo = 1)
  {
     
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid())
    {
      
      $notice = $form->getObject()->isNew() ? 'El item se creó correctamente.' : 'El item se actualizó correctamente.';  
      try {
        $producto = $form->save();
        
        if($request->getParameter('imagen'))
        foreach ( $request->getParameter('imagen') as $imagen){
        $imagen = strtolower(preg_replace('/[^\w\._]+/', '', $imagen));
        
        $archivos = new Archivo();
        $archivos->setProducto($producto);
        $archivos->setNombre($imagen);
        $archivos->setArchivoEtiquetaId(1);
        $archivos->save();
        
                                         
         $targetDir = sfConfig::get('sf_upload_dir').'/productos/';
         $fileMode = 0766;                                     
         chmod($targetDir."".$imagen, $fileMode);
         chmod($targetDir."s_".$imagen, $fileMode);
         chmod($targetDir."g_".$imagen, $fileMode);
         }
      
      
      } catch (Doctrine_Validator_Exception $e) {

        $errorStack = $form->getObject()->getErrorStack();

        $message = get_class($form->getObject()) . ' has ' . count($errorStack) . " field" . (count($errorStack) > 1 ?  's' : null) . " with validation errors: ";
        foreach ($errorStack as $field => $errors) {
            $message .= "$field (" . implode(", ", $errors) . "), ";
        }
        $message = trim($message, ', ');

        $this->getUser()->setFlash('error', $message);
        return sfView::SUCCESS;
      }
      $this->getUser()->setFlash('notice', $notice);
      if($tipo==1) {
          $this->redirect('productoNew/edit?id='.$producto->getId());
      }else {
          $this->redirect('productoNew/editServicio?id='.$producto->getId());
      }
      
    }
  }
  
  public function executeUpload(sfWebRequest $request)
  {
    
  }

  public function executeAddArcForm(sfWebRequest $request)
  {
      
      $tipo = $request->getParameter('tipo');
      $this->forward404unless($request->isXmlHttpRequest());
      $number = intval($request->getParameter("num"));

      $prod = $producto = Doctrine_Core::getTable('Producto')->find($request->getParameter('id'));
      if(!is_null($prod)){
            $form = new ProductoForm($producto);
      }else{
            $form = new ProductoForm();
      }

      $form->addArchivo($number);
      return $this->renderPartial('addPic',array('form' => $form, 'num' => $number,'tipo'=>$tipo));
  }
  
  public function executeAddPreForm(sfWebRequest $request)
  {
      $tipo = $request->getParameter('tipo');
      $this->forward404unless($request->isXmlHttpRequest());
      $number = intval($request->getParameter("num"));

      $prod = $producto = Doctrine_Core::getTable('Producto')->find($request->getParameter('id'));
      if(!is_null($prod)){
            $form = new ProductoForm($producto);
      }else{
            $form = new ProductoForm();
      }

      $form->addPrecio($number);
      return $this->renderPartial('addPre',array('form' => $form, 'num' => $number,'tipo'=>$tipo));
  }
  
  public function executeAddDetForm(sfWebRequest $request)
  {
      
      $tipo = $request->getParameter('tipo');
      $this->forward404unless($request->isXmlHttpRequest());
      $number = intval($request->getParameter("num"));

      $prod = $producto = Doctrine_Core::getTable('Producto')->find($request->getParameter('id'));
      if(!is_null($prod)){
            $form = new ProductoForm($producto);
      }else{
            $form = new ProductoForm();
      }

      $form->addDetalle($number);
      return $this->renderPartial('addDet',array('form' => $form, 'num' => $number,'tipo'=>$tipo));
  }
  
  public function executeShow(sfWebRequest $request)
  {
    $this->producto = Doctrine_Core::getTable('Producto')->find(array($request->getParameter('id')));
    

    $precio = new ProductoPrecio();    
    $this->precios = $precio->getPrecioProductoPrincipal($this->producto->getId());

    $detalle = new ProductoDetalle();
    $this->detalles = $detalle->getDetalleProducto($this->producto->getId());
    
    $imagen = new Archivo();
    $this->imagenes = $imagen->getArchivoProducto($this->producto->getId());   
  }

}
